/**
 * 字段类型枚举
 */
export enum FieldType {
  STRING = 'String',
  INTEGER = 'Integer',
  LONG = 'Long',
  DOUBLE = 'Double',
  BOOLEAN = 'Boolean',
  LOCAL_DATE = 'LocalDate',
  LOCAL_TIME = 'LocalTime',
  LOCAL_DATE_TIME = 'LocalDateTime',
  BIG_DECIMAL = 'BigDecimal'
}

/**
 * 字段配置接口
 */
export interface FieldConfig {
  /** 字段名 */
  name: string
  /** 字段类型 */
  type: FieldType
  /** 显示标签 */
  label: string
  /** 是否必填 */
  required: boolean
  /** 是否主键 */
  primaryKey: boolean
  /** 是否自增 */
  autoIncrement: boolean
  /** 是否可搜索 */
  searchable: boolean
  /** 是否可排序 */
  sortable: boolean
  /** 是否在列表中显示 */
  showInTable?: boolean
  /** 是否在表单中显示 */
  showInForm?: boolean
  /** 字段长度 */
  maxLength?: number
  /** 小数位数 */
  scale?: number
  /** 默认值 */
  defaultValue?: any
  /** 字段描述/注释 */
  comment?: string
}

/**
 * 实体配置接口
 */
export interface EntityConfig {
  /** 实体名称（类名） */
  name: string
  /** 表名 */
  tableName: string
  /** 显示名称 */
  displayName: string
  /** API路径 */
  apiPath: string
  /** 字段配置列表 */
  fields: FieldConfig[]
  /** 表注释 */
  tableComment?: string
  /** 是否有复合主键 */
  hasCompositePrimaryKey?: boolean
}

/**
 * 实体数据接口（动态类型）
 */
export interface EntityData {
  [key: string]: any
}

/**
 * 分页查询参数
 */
export interface PageQuery {
  /** 当前页码，从1开始 */
  current: number
  /** 每页大小 */
  size: number
  /** 搜索关键词 */
  keyword?: string
  /** 排序字段 */
  sortField?: string
  /** 排序方向 */
  sortOrder?: 'asc' | 'desc'
}

/**
 * 分页结果
 */
export interface PageResult<T> {
  /** 当前页数据 */
  records: T[]
  /** 总记录数 */
  total: number
  /** 每页大小 */
  size: number
  /** 当前页码 */
  current: number
  /** 总页数 */
  pages: number
}

/**
 * 表单操作类型
 */
export enum FormAction {
  CREATE = 'create',
  UPDATE = 'update',
  VIEW = 'view'
}

/**
 * 操作按钮配置
 */
export interface ActionConfig {
  /** 按钮文本 */
  text: string
  /** 按钮类型 */
  type?: 'primary' | 'success' | 'warning' | 'danger' | 'info'
  /** 图标 */
  icon?: string
  /** 是否显示 */
  show?: boolean
  /** 点击事件 */
  onClick?: (row: EntityData) => void
}